package br.com.ozsolucoes.util;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import br.com.ozsolucoes.entity.Cliente;
import br.com.ozsolucoes.entity.PessoaFisica;
import br.com.ozsolucoes.entity.PessoaJuridica;

@SessionScoped
@ManagedBean
public class ClienteSessaoManagedBean extends Sessao {

	public ClienteSessaoManagedBean() {
	}

	private String argumento;
	private static final String ARG_PERFIL = "perfil";

	private PessoaFisica pessoaFisica;
	private PessoaJuridica pessoaJuridica;

	public void iniciarSessao(String arg, Cliente cliente, int tipo, String perfil) {
		this.argumento = arg.toLowerCase();
		if (!sessaoExiste(argumento)) {
			setSessao(argumento, cliente);
		}

		switch (tipo) {
		case Constantes.CLIENTE_PF:
			pessoaFisica = (PessoaFisica) cliente;
			setSessao(PessoaFisica.class.getSimpleName(), pessoaFisica);
			setTipo("tipoCliente", tipo);
			setPerfil("perfil", perfil);
			break;
		case Constantes.CLIENTE_PJ:
			pessoaJuridica = (PessoaJuridica) cliente;
			setSessao(PessoaJuridica.class.getSimpleName(), pessoaJuridica);
			setTipo("tipoCliente", tipo);
			setPerfil("perfil", perfil);
		default:
			break;
		}

	}

	public boolean verificaSessao(String argumento) {
		return (sessaoExiste(argumento.toLowerCase()));
	}

	public String destruirSessao() {
		destruir();
		return "home";
	}

	public Cliente getClienteSessao() {
		this.argumento = Cliente.class.getSimpleName().toLowerCase();
		if (sessaoExiste(argumento)) {
			Cliente usuario = (Cliente) getSession().getAttribute(argumento);
			return usuario;
		} else {
			return null;
		}
	}

	public String getPerfilSessao() {
		this.argumento = ARG_PERFIL;
		if (sessaoExiste(argumento)) {
			return (String) getSession().getAttribute(argumento);
		} else {
			return null;
		}
	}

	public void setClienteSessao(Cliente dadosSessao) {
	}

	public static ClienteSessaoManagedBean getInstance() {
		return new ClienteSessaoManagedBean();
	}

	public int getTipoCliente() {
		if (sessaoExiste("tipoCliente")) {
			int tipoCliente = (Integer) getSession().getAttribute("tipoCliente");
			return tipoCliente;
		} else {
			return 0;
		}
	}

	public PessoaFisica getPessoaFisica() {
		this.argumento = PessoaFisica.class.getSimpleName();
		if (sessaoExiste(argumento)) {
			PessoaFisica pessoaFisica = (PessoaFisica) getSession().getAttribute(argumento);
			return pessoaFisica;
		} else {
			return null;
		}
	}

	public void setPessoaFisica(PessoaFisica pessoaFisica) {
		this.pessoaFisica = pessoaFisica;
	}

	public PessoaJuridica getPessoaJuridica() {
		this.argumento = PessoaJuridica.class.getSimpleName();
		if (sessaoExiste(argumento)) {
			PessoaJuridica pessoaJuridica = (PessoaJuridica) getSession().getAttribute(argumento);
			return pessoaJuridica;
		} else {
			return null;
		}
	}

	public void setPessoaJuridica(PessoaJuridica pessoaJuridica) {
		this.pessoaJuridica = pessoaJuridica;
	}

}
